package router

import (
	"ginstudydemo.com/main/pkg/logger"
	"github.com/gin-contrib/cors"
	"github.com/gin-gonic/gin"
	"time"
)

// Router 创建并配置一个Gin引擎实例
func Router() *gin.Engine {
	// 创建一个默认的Gin引擎实例
	r := gin.Default()

	// 使用 CORS 中间件(跨域)
	r.Use(cors.New(cors.Config{
		AllowOrigins:     []string{"*"},                                                // 允许的域名，可以根据需要更改
		AllowMethods:     []string{"GET", "POST", "PUT", "DELETE", "OPTIONS", "PATCH"}, // 允许的请求方法
		AllowHeaders:     []string{"Origin", "Content-Type", "Authorization"},          // 允许的请求头
		ExposeHeaders:    []string{"Content-Length"},
		AllowCredentials: true,           // 允许携带 Cookie
		MaxAge:           12 * time.Hour, // 预检请求的缓存时间
	}))

	// 使用自定义的日志记录配置，将日志记录到文件和标准输出
	r.Use(gin.LoggerWithConfig(logger.LoggerToFile()))
	// 使用自定义的Recover中间件，处理并记录panic错误
	r.Use(logger.Recover)

	// 配置auth相关路由
	AuthRouter(r)

	// 配置用户相关的路由
	UserRouter(r)

	// 配置角色相关的路由
	RoleRouter(r)

	//配置 文件上传 路由
	UploadFileRouter(r)

	//配置 菜单 路由
	MenusRouter(r)

	//配置 部门 路由
	DeptRouter(r)

	//配置 字典 路由
	DictRouter(r)

	//配置 下载 路由
	DownloadFileRouter(r)

	//配置 资源 路由
	ResourceRouter(r)
	//配置 分类 路由
	CategoryRouter(r)

	//配置 专题 路由
	TopicRouter(r)

	// 配置书籍相关的路由(起初用于保留测试的代码)
	//BookRouter(r)

	//配置 websocket 路由
	WstestRouter(r)

	// 返回配置好的Gin引擎实例
	return r
}
